第一行為X,第二行為方程式
例如:
7
1 -1
==> 先對X-1做微分 已經是1
2
1 1 1
==> X^2+x+1做微分 ,得到2X+1
==>2帶入即可得到5
簡單來說即是按照微分的方法去求解即可
#include <iostream>
#include <string>
#include <sstream>
#include <cmath>
using namespace std;
int main(){
int a;
string b;
stringstream ss;
while(cin>>a){
int count=0,ex[1000]={0},tmp=0,sum=0,count2=0;
ss.clear();
ss.str("");
cin.ignore();
getline(cin,b);
ss<<b;
while(ss>>tmp){
ex[count]=tmp;
count++;
}
for(int i=count-1;i>0;i--){
sum+=i*ex[count2]*pow(a,i-1);
count2++;
}
cout<<sum<<endl;
}
}
點我看UVA10931
題目很簡短,就是輸入一個數字例如21,轉成二進位制是10101,然後算Parity的個數有幾個,像是這個例子就是輸出The parity of 10101 is 3 (mod 2).
可以不斷input直到input為零則停止。
C++ Vector的用法與簡介可以參考延伸閱讀:https://mropengate.blogspot.com/2015/07/cc-vector-stl.html
首先會想到要把input%2去判斷是餘1還是餘0,如果是餘1就要Parity+1,並將input%2的結果存進vector裡
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector <int> m;//用來存放轉成二進位的數字
int n;//這是input
while(cin>>n)
{
m.clear();//要記得清空陣列
int e=0;//計算Parity
if(n==0)break;
cout<<"The parity of ";
while(n>0)
{
if(n%2==1)
{
m.push_back(n%2);//將餘1存進陣列
e++;//如果有餘1就要Parity+1
}
else
{
m.push_back(n%2);//將餘0存進陣列
}
n/=2;
}
reverse(m.begin(), m.end());
for (int i = 0; i < m.size(); i++) {
cout << m[i];
}
cout<<" is "<<e;
cout<<" (mod 2)."<<endl;
}
return 0;
}